// #include <tenacitas.log.core/logger.h>
// #include <tenacitas.log.core/level.h>
// #include <tenacitas.log.core/thread_id.h>

// #include <iostream>
// #include <cstdint>
// #include <string>
// #include <memory>
// #include <thread>
// #include <chrono>

// namespace tenacitas {
//     namespace log {
//         namespace core {
//             namespace t001 {

//                 struct simple_media {

//                     simple_media(const thread_id & p_th_id)
//                         : m_th_id(p_th_id){}

//                     simple_media(simple_media && p_media)
//                         : m_th_id(p_media.m_th_id) {}

//                     template <typename t_data>
//                     rc<> write(const t_data & p_data) {
//                         std::cout << "|" << p_data;
//                         return rc<>();
//                     }
                    
//                     template <typename t_data>
//                     rc<> write( t_data && p_data) {
//                         std::cout << "|" << p_data;
//                         return rc<>();                        
//                     }

//                     rc<> new_line(level p_level,
//                                   uint64_t p_nanosecs,
//                                   const char * p_file,
//                                   int64_t p_line) {
//                         std::cout << "\n"
//                                   << p_level.str() << "|"
//                                   << p_nanosecs << "|"
//                                   << m_th_id << "|"
//                                   << p_file << "|"
//                                   << p_line;
//                         return rc<>();
//                     }

//                     simple_media & operator=(simple_media && p_media) {
//                         m_th_id = std::move(p_media.m_th_id);
//                         return *this;
//                     }
                    

//                 private:
//                     thread_id m_th_id;

//                 };

//                 struct supplier {
//                     typedef simple_media media;
//                 };
                
//                 typedef core::logger<supplier> logger;

//                 template<typename t_test_class>
//                 bool run() {
//                     bool rc = true;
                
//                     std::cout << "t001::" << t_test_class::name << " ";
                
//                     if (t_test_class::run()) {
//                         std::cout << " - PASSED" << std::endl;
//                     }
//                     else {
//                         rc = false;
//                         std::cout << " - FAILED" << std::endl;
//                     }
//                     return rc;
//                 }

            
//                 /** ------------------------------------------------------------- */
//                 class t0 {
//                 public:
//                     static const std::string name;

//                     static bool run() {

//                         logger l_logger;
                        
//                         log_info(l_logger) << "ola" << 456.12;

//                         return true;
//                     }
//                 };

//                 const std::string t0::name = "t0";

//                 /** ------------------------------------------------------------- */
//                 class t1 {
//                 public:

//                     static const std::string name;

//                     static void f() {

//                         logger l_logger;

//                         log_info(l_logger) << "YES!!!!!";

//                         log_warn(l_logger) << "will crash!";
//                     }


//                     static bool run() {
                        
//                         logger l_logger;
                        
//                         log_info(l_logger) << "bye" << 3587 << 'W';

//                         std::thread l_th(t1::f);

//                         std::this_thread::sleep_for(std::chrono::milliseconds(500));

//                         l_th.join();

//                         return true;
//                     }
//                 };

//                 const std::string t1::name = "t1";

//                 /** ------------------------------------------------------------- */
//                 class t9999 {
//                 public:
//                     static const std::string name;

//                     static bool run() {

//                         logger l_logger;

//                         log_error(l_logger) << "one more";

//                         return true;
//                     }

//                 };

//                 const std::string t9999::name = "t9999";
            
//                 /** ------------------------------------------------------------- */
//                 class t2 {
//                 public:

                    
//                     static const std::string name;

//                     static bool run() {

//                         logger l_logger(level::warn);

//                         log_info(l_logger) << "what?";

//                         return true;
//                     }
//                 };

//                 const std::string t2::name = "t2";

//                 /** ------------------------------------------------------------- */
//                 static void run() {
//                     run<t0>();
//                     run<t1>();
//                     run<t2>();
//                     run<t9999>();
//                 }
//             }
//         }
//     }
// }
